home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (PO)
/
Nibble Volume 12, No. 10 (1991-10)(MindCraft Publishing)(Side A)[a].zip
/
Nibble Volume 12, No. 10 (1991-10)(MindCraft Publishing)(Side A)[a].po
/
FILE.SIFTER.bas
< prev
next >
Wrap
BASIC Source File
|
1996-12-24
|
16KB
|
371 lines
10 REM **************************
20 REM * FILE.SIFTER *
30 REM * by Charles T. Hill *
40 REM * Copyright(c) 1991 *
50 REM * Mindcraft Publ. Corp. *
60 REM * Lincoln, MA 01773 *
70 REM **************************
80 :
90 REM INITIALIZE VARIABLES
100 ONERR GOTO 3450
110 IF PEEK(48640) < >76 THEN PRINT "PROGRAM REQUIRES PRODOS": END
120 D$ = CHR$(4): PRINT D$;"PR#3":HT = 1403
130 DIM FI$(20),W$(100)
140 :
150 REM GREETING
160 HOME : NORMAL : PRINT : VTAB 4
170 PRINT SPC( 25);"FILE SIFTER"
180 PRINT SPC( 25);"By Charles T. Hill"
190 PRINT SPC( 25);"Copyright(c) 1991"
200 PRINT SPC( 25);"Mindcraft Publ. Corp"
210 PRINT SPC( 25);"Lincoln, MA 01773"
220 PRINT : PRINT
230 PRINT SPC( 15);"A utility for removing carriage returns,
240 PRINT SPC( 15);"control characters, and/or left margins"
250 PRINT SPC( 15);"from TXT or AWP or other files."
260 PRINT
270 PRINT SPC( 15);"Use letters or up-down arrows to select lines,"
280 PRINT SPC( 15);"right-left arrows to see additional files,"
290 PRINT SPC( 15);"RETURN to select a file or subdirectory,"
300 PRINT SPC( 15);"and ESC to back up or exit to Basic."
310 PRINT
320 :
330 REM INPUT PREFIX
340 LA$ = "": REM RESET LABELS TO INDICATE DIR NOT READ FOR RESTART
350 PRINT : PRINT SPC( 8);"PREFIX OR SLOT NUMBER: ";
360 IS = 1: GOSUB 1100: REM GET LINE
370 IF GL$ = "" OR GL$ = CHR$(27) THEN 1660: REM CHECK FOR END
380 PS$ = GL$:SN = VAL(PS$)
390 IF (SN <1 OR SN >7) THEN P$ = PS$: GOTO 450: REM not a slot
400 PRINT : PRINT SPC( 16);"DRIVE NUMBER: ";
410 IS = 0: GOSUB 1100: REM GET LINE
420 IF GL$ = CHR$(27) THEN 1660: REM CHECK FOR END
430 PD$ = GL$
440 P$ = ",S" +PS$ +",D" +PD$: REM CONSTRUCT PATH USING SLOT,DRIVE
450 PRINT D$;"PREFIX";P$: REM ENTER PATH
460 PRINT D$;"PREFIX": INPUT P$: REM RETRIEVE FULL PREFIX
470 P$ = LEFT$(P$, LEN(P$) -1): REM strip trailing slash
480 :
490 REM OPEN DIRECTORY
500 VTAB 23: POKE HT,79: PRINT : REM AVOID BLANK LINE ABOVE
510 PG = 0:EOD = 0
520 X = FRE(0): REM CLEAR MEMORY OF OLD VALUES OF CHANGED STRINGS
530 PRINT D$;"CLOSE";P$
540 PRINT D$;"OPEN ";P$;",TDIR"
550 PRINT D$;"READ";P$
560 INPUT A$: INPUT LA$: INPUT A$: REM READ HEADER
570 :
580 REM READ DIRECTORY FILES
590 IF EOD = 1 THEN GOTO 700: REM NO MORE FILES
600 PG = PG +1
610 VTAB 23: POKE HT,79: PRINT : REM AVOID BLANK LINE ABOVE
620 FOR J = 1 TO 20
630 INPUT FI$(J): REM READ FILEINFO
640 IF FI$(J) = "" THEN INPUT "";ST$:EOD = 1: GOTO 660: REM END OF DIR
650 NEXT
660 NL = J -1: REM NUMBER OF LINES READ
670 OI = 1: REM RESET DISPLAY LINE
680 :
690 REM SELECT DIRECTORY FILE
700 HOME : PRINT P$: PRINT LA$: REM PRINT PATH & LABELS
710 FOR I = 1 TO NL: GOSUB 920: NEXT : GOSUB 990:I = OI: GOSUB 910
720 IF EOD = 1 THEN VTAB NL +3: IF NL <20 THEN PRINT
730 IF EOD = 1 THEN PRINT ST$
740 VTAB 1: POKE HT,68: PRINT "PAGE ";PG;: POKE HT,77: PRINT "-->";
750 IF EOD = 1 THEN VTAB 1: POKE HT,77: PRINT "<--";
760 GOSUB 1030: REM GET KEY
770 IF K = 13 THEN K = I: GOTO 1330: REM RETURN -- CHECK FILETYPE
780 IF K = 8 THEN GOSUB 920: PRINT D$;"CLOSE": GOTO 500: REM LEFT
790 IF K = 11 THEN GOSUB 920:I = I -1: REM UP
800 IF K = 21 THEN GOSUB 920: GOTO 590: REM RIGHT
810 IF K = 10 THEN GOSUB 920:I = I +1: REM DOWN
820 IF K = 27 THEN 1470: REM ESC -- RESTART
830 IF K >96 AND K <123 THEN K = K -32: REM SMALL LETTERS
840 IF K >64 AND K <85 THEN GOSUB 920:I = K -64: REM LETTERS A-T
850 IF I >NL THEN I = NL
860 IF I <1 THEN I = 1
870 OI = I
880 GOSUB 910: GOTO 760
890 :
900 REM DISPLAY DIRECTORY FILES
910 INVERSE
920 V = I +2
930 VTAB V: POKE HT,1: PRINT FI$(I);: NORMAL
940 INVERSE :VA = I +64
950 VTAB V: POKE HT,0: PRINT CHR$(VA);
960 NORMAL : RETURN
970 :
980 REM DISPLAY PROGRAM TITLE
990 VTAB 23: POKE HT,0: INVERSE : PRINT SPC( 2);"FILE SIFTER ";
1000 RETURN
1010 :
1020 REM GET KEY FROM KEYBOARD
1030 K = PEEK(49152): IF K <128 THEN 1030
1040 K = K -128: POKE 49168,0: RETURN
1050 :
1060 REM CLEAR LINE
1070 VTAB 24: POKE HT,0: PRINT SPC( 79);: RETURN
1080 :
1090 REM GET LINE FROM KEYBOARD
1100 V = PEEK(37) +1:H = 30
1110 GL$ = ""
1120 GOSUB 1030: REM GET KEY
1130 IF K = 13 THEN RETURN : REM RETURN
1140 LL = LEN(GL$)
1150 IF K = 27 THEN 1280: REM ESC -- BACKUP
1160 IF K < >8 AND K < >127 THEN 1220: REM NOT LEFT
1170 LL = LL -1: REM LEFT
1180 IF LL >0 THEN GL$ = LEFT$(GL$,LL)
1190 IF LL = 0 THEN GL$ = ""
1200 VTAB V: POKE HT,H +LL +1: PRINT " ";
1210 GOTO 1120: REM GET ANOTHER CHARACTER
1220 IF LL = 40 THEN 1120: REM LIMIT 40 CHARACTERS
1230 IF IS = 0 AND K >47 AND K <58 THEN GL$ = GL$ + CHR$(K): REM #
1240 IF IS = 1 AND K >31 THEN GL$ = GL$ + CHR$(K): REM STRING
1250 VTAB V: POKE HT,H +LL +1
1260 IF LEN(GL$) >LL THEN PRINT CHR$(K);
1270 GOTO 1120: REM GET NEXT CHARACTER
1280 IF LL >0 THEN VTAB V: POKE HT,H: PRINT SPC( LL +1): GOTO 1110
1290 GL$ = CHR$(27)
1300 RETURN : REM escape when blank
1310 :
1320 REM CHECK FILETYPE
1330 NM$ = MID$ (FI$(I),2,16): REM GET FILENAME
1340 FOR J = 1 TO 15: REM TO STRIP TRAILING BLANKS
1350 IF RIGHT$(NM$,1) = " " THEN NM$ = LEFT$(NM$, LEN(NM$) -1)
1360 NEXT J
1370 FT$ = MID$ (FI$(I),18,3): REM get file type
1380 IF FT$ = "DIR" THEN P$ = P$ +"/" +NM$: GOTO 1630: REM READ NEW DIR
1390 PI$ = P$ +"/" +NM$: REM PATH FOR INPUT FILE
1400 IF FT$ = "TXT" OR FT$ = "AWP" THEN 1720: REM DISPLAY OPTIONS
1410 VTAB 24: POKE HT,0: INVERSE
1420 PRINT "Filetype is not TXT or AWP. Proceed anyway? <N> ";
1430 NORMAL : GOSUB 1030: IF K = 89 OR K = 121 THEN 1720: REM YES
1440 GOSUB 1070: GOTO 760: REM NO
1450 :
1460 REM RESTART
1470 PRINT D$;"CLOSE": GOSUB 1070
1480 IF LA$ = "" THEN 1660: REM DIRECTORY NOT READ
1490 IF FT$ = "" OR FT$ = "DIR" THEN 1540: REM NO INPUT FILE YET
1500 VTAB 24: POKE HT,0
1510 INVERSE : PRINT "SAME INPUT FILE? <Y>";: NORMAL
1520 GOSUB 1030: IF K = 78 OR K = 110 OR K = 27 THEN GOSUB 1070: GOTO 1540
1530 GOTO 1720: REM DISPLAY OPTIONS
1540 VTAB 24: POKE HT,0
1550 INVERSE : PRINT "DISPLAY PREVIOUS DIRECTORY? <Y>";: NORMAL
1560 GOSUB 1030: IF K = 78 OR K = 110 OR K = 27 THEN GOSUB 1070: GOTO 1660
1570 V = 24: GOSUB 1070
1580 NP$ = P$
1590 NP$ = LEFT$(NP$, LEN(NP$) -1): REM STRIP SUBDIRECTORY NAME
1600 IF RIGHT$(NP$,1) < >"/" THEN 1590
1610 IF LEN(NP$) = 1 THEN 1630: REM WAS ROOT DIRECTORY
1620 P$ = LEFT$(NP$, LEN(NP$) -1): REM STRIP TRAILING SLASH
1630 VTAB 3: POKE HT,0: PRINT SPC( 80);
1640 VTAB 23: POKE HT,0: INVERSE : PRINT "READING DIRECTORY ";P$;
1650 NORMAL : GOTO 450: REM RESET PREFIX
1660 POKE HT,0
1670 VTAB 24: INVERSE : PRINT "RESTART? <Y> ";
1680 NORMAL : GOSUB 1030: IF K = 78 OR K = 110 OR K = 27 THEN END
1690 GOTO 160: REM GREETING
1700 :
1710 REM DISPLAY OPTIONS MENU
1720 HOME
1730 PRINT "PATHNAME OF INPUT FILE: ";PI$
1740 PRINT
1750 PRINT "CONTROL CHARACTER OPTIONS: "
1760 PRINT "(1) delete all control characters"
1770 PRINT "(2) convert to ^"
1780 PRINT "(3) convert to [Letter]"
1790 PRINT "(4) keep all (uses 2 for preview)"
1800 PRINT "CHOICE? <1> ";
1810 GOSUB 1030: REM get key
1820 IF K = 27 THEN 1470: REM RESTART
1830 IF K = 13 THEN CC = 1: PRINT : GOTO 1860: REM return
1840 IF K <49 OR K >53 THEN 1810: REM NOT 1-4
1850 PRINT CHR$(K):CC = K -48
1860 PRINT
1870 PRINT "CARRIAGE RETURN OPTIONS: "
1880 PRINT "(1) keep only before indented lines"
1890 PRINT "(2) convert double carriage returns to single"
1900 PRINT "(3) keep all blank lines"
1910 PRINT "(4) keep all carriage returns"
1920 PRINT "CHOICE? <3> ";
1930 GOSUB 1030: REM get key
1940 IF K = 27 THEN 1720: REM DISPLAY OPTIONS
1950 IF K = 13 THEN CR = 3: PRINT : GOTO 1980: REM return
1960 IF K <49 OR K >53 THEN 1930: REM NOT 1-4
1970 PRINT CHR$(K):CR = K -48
1980 PRINT
1990 PRINT "LEFT MARGIN OPTION:"
2000 PRINT "Maximum spaces to delete? <0> ";
2010 IS = 0: GOSUB 1100: REM GET LINE
2020 IF GL$ = CHR$(27) THEN 1720: REM display options
2030 SP = VAL(GL$): IF GL$ = "" THEN SP = 0
2040 PRINT : PRINT
2050 :
2060 REM PREVIEW
2070 PRINT "PREVIEW EFFECTS OF OPTIONS? <Y> ";
2080 GOSUB 1030: REM GET KEY
2090 IF K >31 THEN PRINT CHR$(K);
2100 PRINT :PV = 1: REM DEFAULT
2110 IF K = 78 OR K = 110 OR K = 27 THEN PV = 0
2120 PC = CC: IF CC = 4 AND PV = 1 THEN PC = 2: REM PREVIEW OPTION 4 AS 2
2130 IF PV = 1 THEN PRINT "PRESS ESC TO STOP PREVIEW"
2140 :
2150 REM OPEN INPUT FILE
2160 PRINT D$;"CLOSE": REM CLOSE DIR
2170 X = FRE(0): REM CLEAR MEMORY OF OLD STRINGS
2180 FOR J = 1 TO 10:W$(J) = "": NEXT J:J = 1: REM CLEAR OUTPUT LINES
2190 EOF = 0:NC = 0:RC = 0:SC = 0:FL = 1:KP = 0: REM RESET COUNTS FOR FORMAT
2200 TS = 0
2210 B = 0: IF FT$ = "AWP" THEN B = 300: REM SKIP AWP HEADER
2220 PRINT D$;"OPEN ";PI$;",T";FT$
2230 REM IF ERROR THEN GOTO RESTART
2240 A = 0: REM INDEX FOR AWP FORMAT CODES
2250 IF PV = 1 THEN 2450: REM INPUT BUFFER
2260 :
2270 REM OUTPUT PATHNAME
2280 PRINT
2290 PRINT "PATHNAME OF OUTPUT FILE: ";
2300 IS = 1: GOSUB 1100:PW$ = GL$: REM GET LINE
2310 PRINT
2320 IF GL$ = CHR$(27) THEN 1720: REM DISPLAY OPTIONS
2330 PRINT
2340 PRINT D$;"CREATE";PW$;",TTXT": GOTO 2420
2350 REM IF ERROR <>19 THEN GOTO OPEN OUTPUT FILE
2360 PRINT "FILE ALREADY EXISTS. DELETE IT? <N> "
2370 GOSUB 1030: REM GET KEY
2380 IF K = 121 OR K = 89 THEN PRINT D$;"DELETE";PW$: GOTO 2420
2390 GOTO 2280: REM GET OUTPUT PATHNAME IF NOT YES
2400 :
2410 REM OPEN OUTPUT FILE
2420 PRINT D$;"OPEN";PW$
2430 :
2440 REM INPUT BUFFER
2450 INVERSE : PRINT ; SPC( 13);"READING BUFFER"; SPC( 2);: NORMAL
2460 IF FT$ = "AWP" AND FL = 1 THEN INVERSE : PRINT "......";: NORMAL
2470 REM READ CHARACTER FROM INPUT BUFFER
2480 BC = B/50: IF BC = INT(BC) THEN INVERSE : PRINT ".";: NORMAL
2490 IF B = 512 THEN 2920: REM WRITE BUFFER
2500 A = A +1:KP = K:K = 0:K = PEEK(38400 +B):B = B +1
2510 REM CHECK FOR END OF FILE
2520 IF FT$ = "AWP" AND C(1) = 255 AND K = 255 THEN 2920: REM END OF AWP
2530 REM IF ERROR=2 THEN SET EOF=1 AND GOTO FORMAT OUTPUT
2540 IF FT$ < >"AWP" THEN 2840: REM PROCESS TXT CHARACTER
2550 :
2560 REM PROCESS AWP CHARACTER
2570 IF A <5 THEN C(A) = K: REM FORMAT CODES
2580 REM C(1)-2 IS LINE LENGTH, C(2)=208 IS BLANK LINE, C(3) IS INDENTATION
2590 IF A <2 GOTO 2480: REM CHECK NEXT CHARACTER
2600 IF C(2) < >0 THEN A = 0: REM RESET AFTER FORMAT CODES
2610 IF C(2) = 208 THEN W$(J) = W$(J) + CHR$(13): REM BLANK LINE
2620 IF A <5 GOTO 2480: REM DON'T PRINT FIRST 4 CHARACTERS
2630 IF C(3) = 255 THEN 2690: REM SKIP TAB RULER
2640 IF C(3) < >255 AND C(3) >127 THEN C(3) = C(3) -128
2650 IF A = 5 AND C(3) >0 THEN FOR M = 1 TO C(3):W$(J) = W$(J) + CHR$(32): NEXT M
2660 REM ABOVE INDENTS LINE C(3) SPACES
2670 IF (K = 22 OR K = 23) THEN K = 32: REM TAB SPACES
2680 GOSUB 2740: REM CONVERT CHARACTER
2690 IF ((A -4) <(C(1) -2)) GOTO 2480: REM CHECK LENGTH OF LINE
2700 IF C(3) = 255 THEN A = 0: GOTO 2480: REM END OF TAB RULER
2710 W$(J) = W$(J) + CHR$(13):A = 0: GOTO 2480: REM END OF LINE
2720 :
2730 REM CONVERT CHARACTER
2740 IF PC = 1 AND KP = 27 THEN 2810: REM SKIP PRINTER CODE AFTER ESC
2750 IF LEN(W$(J)) >175 THEN J = J +1
2760 IF K >31 THEN W$(J) = W$(J) + CHR$(K)
2770 IF PC = 2 AND K <32 THEN W$(J) = W$(J) + CHR$(94): REM ^
2780 IF PC = 3 AND K <32 THEN W$(J) = W$(J) + CHR$(91) + CHR$(K +64) + CHR$(93)
2790 IF PC = 4 AND K <32 THEN W$(J) = W$(J) + CHR$(K)
2800 GOSUB 3340: IF E = 27 THEN POP : GOTO 3380: REM CHECK ESC
2810 RETURN
2820 :
2830 REM PROCESS TXT CHARACTER
2840 IF K = 0 THEN NC = NC +1: GOTO 2480: REM COUNT NULL CHARACTERS
2850 IF K < >0 AND NC >0 THEN NK = K: GOSUB 2890:K = NK:NC = 0: REM PROCESS NULLS
2860 IF K = 13 THEN W$(J) = W$(J) + CHR$(13): GOTO 2480: REM RETURN
2870 IF K >127 THEN K = K -128: REM STRIP ASCII HIGH BIT
2880 GOSUB 2740: GOTO 2480: REM CONVERT CHARACTER THEN GET NEW CHARACTER
2890 K = 0: FOR I = 1 TO NC: GOSUB 2740: NEXT I: RETURN : REM FORMAT NULLS
2900 :
2910 REM FORMAT OUTPUT
2920 IF BC <10 THEN XS = 10 - INT(BC): INVERSE : PRINT SPC( XS): NORMAL
2930 INVERSE : PRINT ; SPC( 13);"WRITING BUFFER"; SPC( 13);: NORMAL
2940 IF PV = 0 THEN PRINT D$;"WRITE";PW$
2950 FOR J = 1 TO 20: IF EOF = 1 THEN 3060
2960 IF W$(J) = "" THEN 3270: REM PROCESS END OF BUFFER
2970 FOR I = 1 TO LEN(W$(J))
2980 WC$ = MID$ (W$(J),I,1): REM GET CHARACTER
2990 IF RC = 0 AND WC$ = CHR$(32) THEN TS = TS +1: GOTO 3230
3000 REM ABOVE PRINTS EMBEDDED SPACES
3010 IF WC$ = CHR$(13) THEN RC = RC +1:SC = 0:FL = 0:TS = 0: GOTO 3230
3020 REM SPACES BETWEEEN CARRIAGE RETURNS ARE IGNORED
3030 IF (RC >0 OR FL = 1) AND WC$ = CHR$(32) THEN SC = SC +1: GOTO 3230
3040 REM COUNT RC AND SC UNTIL A DIFFERENT CHARACTER IS FOUND
3050 IF TS >0 THEN FOR M = 1 TO TS: PRINT CHR$(32);: NEXT M:TS = 0
3060 IF CR = 4 AND RC >0 THEN FOR M = 1 TO RC: PRINT CHR$(13);: NEXT M
3070 REM ABOVE PRINTS ALL CARRIAGE RETURNS
3080 IF CR = 3 AND RC >1 THEN FOR M = 1 TO RC: PRINT CHR$(13);: NEXT M
3090 REM ABOVE PRINTS ALL BLANK LINES
3100 HC = INT(RC/2): REM CONVERTS DOUBLE BLANK LINES TO SINGLE
3110 IF CR = 2 AND HC >0 THEN FOR M = 1 TO HC: PRINT CHR$(13);: NEXT M
3120 REM ABOVE PRINTS DOUBLE BLANK LINES AS SINGLE BLANK LINES
3130 IF CR = 1 AND RC >1 AND SC >0 THEN PRINT CHR$(13);
3140 IF CR < >4 AND RC = 1 AND SC >0 THEN PRINT CHR$(13);
3150 REM ABOVE PRINTS RETURN BEFORE INDENTED LINES
3160 IF CR <4 AND RC = 1 AND SC = 0 THEN PRINT CHR$(32);: REM SPACE
3170 IF CR = 2 AND RC = 2 AND SC = 0 THEN PRINT CHR$(32);: REM SPACE
3180 IF CR = 1 AND RC >1 AND SC = 0 THEN PRINT CHR$(32);: REM SPACE
3190 IF (FL = 1 OR RC >0) AND SC >SP THEN PRINT SPC( SC -SP);
3200 IF EOF = 1 THEN PRINT D$: GOTO 3400: REM END OF FILE
3210 IF WC$ < > CHR$(4) THEN PRINT WC$;: REM PRINT NEXT CHARACTER
3220 RC = 0:SC = 0:FL = 0: IF WC$ = CHR$(4) THEN PRINT CHR$(94);
3230 GOSUB 3340: IF E = 27 THEN 3380
3240 NEXT I
3250 NEXT J
3260 REM PROCESS END OF BUFFER
3270 PRINT D$: REM STOP PRINTING TO OUTPUT FILE
3280 FOR J = 1 TO 10:W$(J) = "": NEXT J:J = 1: REM CLEAR OUTPUT LINES
3290 PRINT D$;"READ";PI$;",B512": REM READ MORE INTO INPUT BUFFER
3300 B = 0: REM RESET BUFFER CHARACTER COUNT
3310 X = FRE(0): GOTO 2450: REM INPUT BUFFER
3320 :
3330 REM CHECK FOR ESCAPE
3340 E = PEEK(49152):E = E -128: POKE 49168,0: RETURN
3350 REM BRANCH AFTER ESC OR EOF
3360 PRINT D$;"CLOSE": REM CLOSE ALL FILES
3370 PRINT
3380 IF PV = 1 THEN PV = 0:PC = CC: GOTO 2160: REM OPEN INPUT FILE
3390 IF PV = 0 THEN 1470: REM RESTART
3400 INVERSE : PRINT "<END OF FILE>";: NORMAL
3410 PRINT
3420 GOTO 3360
3430 :
3440 REM ERROR ROUTINE
3450 EN = PEEK(222): REM GET ERROR NUMBER
3460 EL = PEEK(219) *256 + PEEK(218): REM GET LINE
3470 POKE 216,0: CALL -3288
3480 ONERR GOTO 3450 REM RESET ERROR TRAPPING
3490 IF EN = 2 THEN EOF = 1: GOTO 2940: REM RANGE ERROR
3500 IF EN = 19 THEN GOTO 2360: REM DUPLICATE FILENAME
3510 IF EN = 255 THEN END : REM TRAPPED CTRL-C
3520 PRINT CHR$(4);"CLOSE": REM CLOSE ALL FILES
3530 VTAB 23: POKE HT,0
3540 INVERSE : PRINT "ERROR ";EN;" ON LINE ";EL;
3550 IF EN = 254 THEN 1470: REM TRAPPED ESC
3560 IF EN = 4 THEN PRINT " -- WRITE PROTECTED";
3570 IF EN = 6 THEN PRINT " -- PATH NOT FOUND";
3580 IF EN = 8 THEN PRINT " -- I/O ERROR";
3590 IF EN = 11 OR EN = 16 THEN PRINT " -- SYNTAX ERROR";
3600 PRINT " -- ";: NORMAL
3610 INVERSE
3620 PRINT "PRESS ANY KEY ";: NORMAL : PRINT " ";
3630 GOSUB 1030: REM GET KEY
3640 GOTO 1470: REM RESTART
3650 :
3660 REM BAS TO TXT
3670 PRINT : INPUT "PATHNAME FOR TEXTFILE? ";F$
3680 PRINT CHR$(4);"CREATE";F$;",TTXT"
3690 PRINT CHR$(4);"OPEN";F$
3700 PRINT CHR$(4);"WRITE";F$: LIST
3710 PRINT CHR$(4);"CLOSE": END